﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpGUiBaseInterface.h"

namespace gcmp
{
    class IWidget;

    /// \brief 浮动面板停靠位置
    enum class DockArea : int32_t
    {
        Left = 0x1,             ///< 左侧
        Right = 0x2,            ///< 右侧
        Top = 0x4,              ///< 上部
        Bottom = 0x8,           ///< 下部
        All = 0xf,             ///< 上下左右
        None = 0                ///< 无
    };

    /// \brief 浮动面板停靠方向
    enum class DockOrientation : int32_t
    {
        Horizontal = 1, ///< 水平
        Vertical = 2    ///< 竖直
    };

    /// \brief 浮动面板
    ///
    /// 浮动面板内部可以设置一个内容部件
    class GCMP_GUI_BASE_INTERFACE_EXPORT IDock
    {
    public:
        /// \brief 析构器
        virtual ~IDock();

    public:
        /// \brief 获取浮动面板名称
        /// \return 无
        virtual const std::wstring& GetName() const = 0;
        
        /// \brief 设置浮动面板相对于父窗口位置
        ///
        /// 原点是父窗口的左上角，如果没有父窗口，则桌面即为父窗口
        /// 其中x往右递增，y往下递增
        /// \param x 水平方向坐标值
        /// \param y 竖直方向坐标值
        /// \return 无
        virtual void MoveTo(int x, int y) = 0;

        /// \brief 获取内容部件
        /// \return 内容部件
        virtual IWidget* GetWidget() const = 0;

        /// \brief 设置内容部件
        /// \param opWidget 内容部件
        /// \return 无
        virtual void SetWidget(OwnerPtr<IWidget> opWidget) = 0;

        /// \brief 设置浮动面板的标题
        /// 
        /// \param title 浮动面板标题
        /// \return 无
        virtual void SetTitle(const std::wstring& title) = 0;

        /// \brief 获取浮动面板的标题
        /// 
        /// \param 无
        /// \return 返回浮动面板的标题
        virtual std::wstring GetTitle() const = 0;

        /// \brief 显示浮动面板
        /// \return 无
        virtual void Show() = 0;
   
        /// \brief 隐藏浮动面板
        /// \return 无
        virtual void Hide() = 0;

        /// \brief 激活
        /// \return 无
        virtual void Raise() = 0;

        /// \brief 浮动面板是否处于隐藏状态
        /// \return bool  true 隐藏  false 显示
        virtual bool IsHidden() const = 0;

        /// \brief 设置面板是否浮动
        /// \param floating 是否浮动
        /// \return 无
        virtual void SetFloating(bool floating) = 0;

        /// \brief 是否处于浮动状态
        /// \return true 浮动， false 停靠
        virtual bool IsFloating() const = 0;
    };
}






